package com.wan.core.strategy.selector;

import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public interface Selector<K, T> {

    Optional<T> get(K k);

    default Optional<T> get() {
        return get(null);
    }

    ;

    Collection<T> getAll();

    default List<T> getByPredicate(Predicate<T> predicate) {
        return getAll().stream().filter(predicate).collect(Collectors.toList());
    }

    void add(K k, T t);

    void remove(K k, T t);

}
